package com.ruoyi.common.utils.pdf;


import java.io.File;
import java.util.*;

import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Image;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Base64;

/**
 * @author zhangye
 * @date 2025/2/25 14:12
 * @description
 */
public class CreatePdfUtil {

    private static final Logger log = LoggerFactory.getLogger(CreatePdfUtil.class);

    public static void createPdf(File file, List<String> pdfs) {
        if (null == pdfs || pdfs.isEmpty()) {
            return;
        }

        try {

            File parentDir = file.getParentFile();

            if (!parentDir.exists()) {
                parentDir.mkdirs();
                parentDir.setWritable(true, false);
            }

            PdfWriter writer = new PdfWriter(file.getAbsoluteFile());
            PdfDocument pdfDoc = new PdfDocument(writer);
            Document document = new Document(pdfDoc);

            for (String base64EncodedImage : pdfs) {
                // 移除可能存在的前缀（如"data:image/png;base64,"）
                String base64Pure = base64EncodedImage.split(",")[1];

                byte[] imageBytes = Base64.getDecoder().decode(base64Pure);

                // 将字节数据转化为ImageData对象
                ImageData imageData = ImageDataFactory.create(imageBytes);

                // 创建Image对象
                Image image = new Image(imageData);

                // 将图片添加到document中
                document.add(image);

                // 添加一个换行符或空隙来分隔图片
                document.add(new com.itextpdf.layout.element.Paragraph("\n"));
            }

            // 关闭document
            document.close();

            log.info("PDF文件已成功生成！");
        } catch (IllegalArgumentException e) {
            log.error("Base64解码失败: 输入的字符串不是有效的Base64编码");
            e.printStackTrace();
        } catch (Exception e) {
            log.error("发生了一个错误: {}", e);
            e.printStackTrace();
        }
    }
}
